﻿Imports System.Text.RegularExpressions

Public Enum EnumBarcodeType
    MAZDA_DELIVERY_CODE
    DN_DELIVERY_CODE
    BEAN_LABEL
    CUST_CHECK_CODE
    CANCEL_CODE

    GROUP_REPORT_CODE
    REPORT_CODE
    SEND_CODE
    ENTER_CODE

    KEY_SEND
    SYSITEM_CD
    INBOX_QTY
    UNIQUE_CD
    KEY_INPUT

    NONE
    RESET_CODE
    IRREGULAR_CODE
    SHIPORDER_CODE
    ORDER_CODE
    INNER_LABEL_CODE
    OUTER_LABEL_CODE_I
    OUTER_LABEL_CODE_D
    OUTER_LABEL_CODE_M
    END_LABEL_CODE
    ME_CLOSED_CODE
    EMP_CODE
    INNER_DELIVERY
    MAZDA_DELIVERY
    ORDER_DELIVERY
    CHILDORDER_DELIVERY
    KEY_CLR

    ODR_CODE '注文番号＋品番＋数量
    DNC_CODE 'ダイキョニシカワコード


End Enum


Public Enum EnumChkType
    CONFIRM
    ALERT
    DATA_NEW
    NOTORDER  '注文データ無しの場合
    NEWACTION '新実績データ
    UNIQUECHECK 'UNIQUE存在チェック
End Enum


Public Class CBarcode

    Public Shared ReadOnly Property RESETCODE() As String
        Get
            Return CConst.CNS_RESET1
        End Get
    End Property

    Public Shared Function GetBarcodeType(ByVal barcode As String) As EnumBarcodeType
        Dim checkText As String = barcode

        ''***************************
        ''* マツダ納品書 *SK3006O5D3460H5 0*
        ''***************************
        If checkText.Length = CConst.CNS_MAZDA_DELIVERY Then
            Return EnumBarcodeType.MAZDA_DELIVERY_CODE
        End If

        '注文番号＋品番＋数量のバーコードの場合
        '先頭が「ODR」の場合
        If checkText.StartsWith("ODR") Then

            'べバストさん出荷指示書の場合とダイキョニシカワの分岐
            If HasString(checkText, ":") Then
                Return EnumBarcodeType.ODR_CODE
            Else
                Return EnumBarcodeType.DNC_CODE
            End If

        End If



        'KWJ_START
        ''***************************
        ''* ORDER_CDチェック X123457 (桁数、頭文字チェック)
        ''* CHILD_ORDER_CDチェック X123457 (桁数、頭文字チェック)
        ''***************************
        Dim checkInfo As CCheck = CCheck.GetIns

        'MessageBox.Show(" checkText.Substring(0, 1) :" & checkText.Substring(0, 1))
        'MessageBox.Show("設定されている伝票コード　：" & checkInfo.CheckFirstInitial(checkText.Substring(0, 1)))

        If checkInfo.CheckFirstInitial(checkText.Substring(0, 1)) Then

            '先頭が「Z」の場合
            If checkText = CConst.CNS_END_LABEL Then
                Return EnumBarcodeType.END_LABEL_CODE
            End If

            '先頭が「設定頭文字」以外の場合
            If Not checkText.Substring(0, 1) = "X" And checkText.IndexOf("-") = -1 Then

                Return EnumBarcodeType.ORDER_DELIVERY


            ElseIf Not checkText.Substring(0, 1) = "X" And Not checkText.IndexOf("-") = -1 Then

                Return EnumBarcodeType.CHILDORDER_DELIVERY

            End If

            If checkText.Length = CConst.CNS_ORDER_DELIVERY Then

                'MessageBox.Show("ORDER_Delivery")
                Return EnumBarcodeType.ORDER_DELIVERY

            ElseIf checkText.IndexOf("-") = CConst.CNS_ORDER_DELIVERY Then

                'MessageBox.Show("CHILD_ORDER_Delivery")
                Return EnumBarcodeType.CHILDORDER_DELIVERY

            End If
        End If
        ''***************************
        ''* KEY "CRL" 取消処理 
        ''***************************
        If checkText.StartsWith(CConst.CNS_CLR_CD) Then
            Return EnumBarcodeType.KEY_CLR
        End If

        ''***************************
        ''* KEY "ENTER" 消込処理
        ''***************************
        If checkText.StartsWith(CConst.CNS_ENTER) Then
            Return EnumBarcodeType.ENTER_CODE
        End If

        'KWJ_END

        ''***************************
        ''* DN現品 22      *10000GM581780    WA3*
        ''* 豆ラベル 22    *MAMK56040M  105E3070*
        ''***************************
        If checkText.Length = CConst.CNS_DN_DELIVERY Then
            Dim chk As String = checkText.Substring(1, 5)

            ''DN現品
            If chk = CConst.CNS_DN_LABEL Then
                Return EnumBarcodeType.DN_DELIVERY_CODE
                ''豆ラベル
            Else
                Return EnumBarcodeType.BEAN_LABEL
            End If
            ''豆ラベル
            'If checkText.IndexOf("MAM") Then
            '    Return EnumBarcodeType.BEAN_LABEL
            'Else
            '    ''DN現品
            '    Return EnumBarcodeType.DN_DELIVERY_CODE
            'End If
            'Dim barCdChk As String() = checkText.Split(" ")
            ''DN現品
            'If barCdChk.Length = 5 Then
            '    Return EnumBarcodeType.DN_DELIVERY_CODE
            '    '豆ラベル
            'ElseIf barCdChk.Length = 3 Then
            '    Return EnumBarcodeType.BEAN_LABEL
            'End If
        End If

        ''***************************
        ''* お客様チェックシート 28    *CHBN5V50311     O5D8760   *
        ''***************************
        If checkText.Length = CConst.CNS_CST_CHECKLABEL Then
            Return EnumBarcodeType.CUST_CHECK_CODE
        End If

        '***************************
        '* 途中送信 "SEND_DATA"
        '***************************
        If checkText.StartsWith(CConst.CNS_SENDCD) Then
            Return EnumBarcodeType.SEND_CODE
        End If

        '***************************
        '* 未出荷総統括レポートコードチェック ""##"" 
        '***************************
        If checkText.EndsWith(CConst.CNS_BARCD_SHIPGROUP) Then
            If checkText.StartsWith(CConst.CNS_BARCD_SHIPGROUP) Then
                Return EnumBarcodeType.GROUP_REPORT_CODE
                'Return EnumBarcodeType.REPORT_CODE
            End If
        End If

        '***************************
        '* 出荷統括レポートコードチェック "SH"
        '***************************
        If checkText.StartsWith(CConst.CNS_SHIPREPORT) Then
            Return EnumBarcodeType.REPORT_CODE
        End If


        ''***************************
        ''* ラベル読取終了コードチェック
        ''***************************
        Select Case checkText
            Case CConst.CNS_END_LABEL
                Return EnumBarcodeType.END_LABEL_CODE
            Case CConst.CNS_KEYSEND
                Return EnumBarcodeType.SEND_CODE
        End Select

        '***************************
        '* 注文番号チェック "DEL"
        '***************************
        If checkText.StartsWith(CConst.CNS_CANCEL_CD) Then
            Return EnumBarcodeType.CANCEL_CODE
        End If

        ''MessageBox.Show("checkText:" & checkText)
        ''***************************
        ''* 未出荷総統括レポートコードチェック ""##"" 
        ''***************************
        'If checkText.EndsWith(CConst.CNS_BARCD_SHIPGROUP) Then
        '    If checkText.StartsWith(CConst.CNS_BARCD_SHIPGROUP) Then
        '        Return EnumBarcodeType.GROUP_REPORT_CODE
        '        'Return EnumBarcodeType.REPORT_CODE
        '    End If
        'End If

        ' ''***************************
        ' ''* ラベル読取終了コードチェック
        ' ''***************************
        'Select Case checkText
        '    Case CConst.CNS_END_LABEL
        '        Return EnumBarcodeType.END_LABEL_CODE
        '    Case CConst.CNS_KEYSEND
        '        Return EnumBarcodeType.SEND_CODE
        '    Case CConst.CNS_KEYDELETE
        '        Return EnumBarcodeType.KEY_CANCEL
        'End Select

        ''***************************
        ''* 未出荷統括レポートコードチェック "UN"
        ''***************************
        'If checkText.StartsWith(CConst.CNS_UNSHIPREPORT) Then
        '    Return EnumBarcodeType.REPORT_CODE
        'End If

        ''***************************
        ''* 出荷統括レポートコードチェック "SH"
        ''***************************
        'If checkText.StartsWith(CConst.CNS_SHIPREPORT) Then
        '    Return EnumBarcodeType.REPORT_CODE
        'End If


        ''***************************
        ''* 注文番号チェック "ODR" -->バーコード
        ''***************************
        'If checkText.StartsWith(CConst.CNS_ORDERCD_HEAD) Then
        '    Return EnumBarcodeType.ORDER_CODE
        'End If

        ''***************************
        ''* 画面からの入力チェック "[" "]"
        ''***************************
        'If checkText.StartsWith(CConst.CNS_KEY_HEAD) Then
        '    If checkText.EndsWith(CConst.CNS_KEY_END) Then
        '        Return EnumBarcodeType.KEY_INPUT
        '        'Return EnumBarcodeType.REPORT_CODE
        '    End If
        'End If


        ''***************************
        ''* 注文番号チェック "DEL"
        ''***************************
        'If checkText.StartsWith(CConst.CNS_CANCELCD_HEAD) Then
        '    Return EnumBarcodeType.CANCEL_CODE
        'End If

        ''***************************
        ''* 途中送信 "SEND_DATA"
        ''***************************
        'If checkText.StartsWith(CConst.CNS_SENDCD) Then
        '    Return EnumBarcodeType.SEND_CODE
        'End If

        ''***************************
        ''* 社内ラベルチェック
        ''***************************
        ''NNNNNNNNNNNN@UUUUXX
        ''NNNNNNNNNNNN@UUUU**
        'If checkText.Length > 7 Then
        '    If checkText.IndexOf(CConst.CNS_DELIMITER_LABEL_INNER) = checkText.Length - 7 Then
        '        If Regex.IsMatch(CCommon.TrimCode(checkText, CConst.CNS_DELIMITER_LABEL_INNER, EnumBarcodeType.INNER_LABEL_CODE), "[0-9A-Z]{4}") Then
        '            Return EnumBarcodeType.INNER_LABEL_CODE
        '        End If
        '    End If
        'End If


        ''***************************
        ''* 従業員コードチェック "DEL"
        ''***************************
        'Dim checkInfo As CCheck = CCheck.GetIns
        Dim EmpData As CCheck.EmpData = checkInfo.ChkEmpData(checkText)

        If Not EmpData.empCd Is Nothing Then
            Return EnumBarcodeType.EMP_CODE
        End If
        Return EnumBarcodeType.NONE


    End Function


    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="value"></param>
    ''' <param name="type"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>

    Public Shared Function getBarcodeVl(ByVal value As String, ByVal type As EnumBarcodeType) As String

        Select Case type

            'DN現品票
            Case EnumBarcodeType.DN_DELIVERY_CODE
                Dim dnDeliveryCd As String = value.Substring(7, 7)
                Return dnDeliveryCd

                'MAZDA納品書
            Case EnumBarcodeType.MAZDA_DELIVERY_CODE
                Dim mzDeliveryCd As String = value.Substring(7, 7)
                Return mzDeliveryCd

                '豆ラベル
            Case EnumBarcodeType.BEAN_LABEL
                Dim beanLabelCd As String = value.Substring(14, 7)
                Return beanLabelCd

                'お客様のチェックシート
            Case EnumBarcodeType.CUST_CHECK_CODE
                Dim custChkCd As String = value.Substring(17, 7)
                Return custChkCd


            Case EnumBarcodeType.GROUP_REPORT_CODE

                Dim groupCd As String = value.Replace("##", "")
                Return groupCd

            Case EnumBarcodeType.REPORT_CODE
                'Dim reportCd As String = value.Substring(2, 13)
                Dim reportCd As String = value.Substring(2)
                Return reportCd

        End Select

        Return ""
    End Function


    '特定の文字列が含まれているかを調べる
    Public Shared Function HasString(ByVal target As String, ByVal word As String) As Boolean

        If word = "" Then
            Return False
        End If
        If target.IndexOf(word) >= 0 Then
            Return True
        Else
            Return False
        End If

    End Function


End Class
